package com.hitqz.robot.camera;

import com.google.common.collect.Lists;
import com.hitqz.robot.api.business.enums.BrandEnum;
import com.hitqz.robot.api.business.enums.FormConfigEnum;
import com.hitqz.robot.api.business.enums.RobotParamsFormFieldEnum;
import com.hitqz.robot.api.common.dto.form.FormConfigDto;
import com.hitqz.robot.api.common.dto.form.FormFieldConfigDto;
import com.hitqz.robot.camera.configure.EquipmentCmdEnum;
import com.hitqz.robot.camera.dto.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @author xupkun
 * @date 2024/11/2
 */
public interface IEquipmentService {

    BrandEnum brand();

    /**
     * 必须使用初始化。没有的话 直接返回true
     * @return
     */
    boolean intSdk();

    default boolean login(EquipmentLoginParamsDto dto) {
        return true;
    }

    default boolean loginout(String ip) {
        return true;
    }

    /**
     * 执行其他命令
     */
    default IEquipmentCmdResult executeCmd(QueryParamsDto dto, boolean async, EquipmentCmdEnum cmdEnum,
                                          IEquipmentCmdParamsDto cmdParamsDto) {
        return null;
    }

    default List<EquipmentParamsDto> getDeviceParamsData(QueryParamsDto dto,EquipmentCmdEnum cmdEnum) {
        return Lists.newArrayList();
    }


    default IEquipmentCmdResult getExecuteCmdResult(EquipmentCmdEnum cmdEnum) {
        return null;
    }

    /**
     * 从获取的地方原数据返回
     * @param
     * @param async 是否同步结果后进行返回
     * @return
     */
    default boolean setEquipmentParams(QueryParamsDto dto, List<EquipmentParamsDto> paramsDtos, boolean async) {
        return true;
    }

    /**
     * 获取外设的参数， 需要设置的参数进行返回，由具体驱动进行编码
     * @param dto 查询条件
     * @return 返回的参数建议设置成 [{ "label": "字段名称", "key": "字段关键词，一般为英文", "value": "" }]
     */
    default List<EquipmentParamsDto> getEquipmentParams(QueryParamsDto dto) {
        return Lists.newArrayList();
    }

    default boolean motionAbort(QueryParamsDto dto){
        return true;
    }

    default FormConfigDto getEquipmentConfig(){
        ArrayList<FormFieldConfigDto> fields = new ArrayList<>();
        fields.add(RobotParamsFormFieldEnum.ULTRASONIC_ENABLE.toConfigDto());
        fields.add(RobotParamsFormFieldEnum.COLLISION_AVOIDANCE_ENABLED.toConfigDto());
        fields.add(RobotParamsFormFieldEnum.ROBOT_SPEED.toConfigDto());
        // 通过 FormConfigEnum 创建表单配置
        return FormConfigEnum.ROBOT_PARAMS_CONFIG.toFormConfigDto(fields);
    }


}
